﻿namespace MobileTrack.Core.Model
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Services.Common;
    using System.Linq;
    using System.Linq.Expressions;

    [Table("Celulares")]
    [EntityPropertyMapping("Descripcion", SyndicationItemProperty.Title, SyndicationTextContentKind.Plaintext, true)]
    public class Celular : BaseEntity
    {
        public Celular()
        {
            this.Seguimientos = new List<Seguimiento>();
        }

        [NotMapped]
        public static Expression<Func<Celular, Seguimiento>> LastSeguimientoExpression
        {
            get
            {
                Expression<Func<Celular, Seguimiento>> lastSeguimientoExpression =
                    c => c.Seguimientos.OrderByDescending(s => s.Fecha).ThenByDescending(s => s.Id).FirstOrDefault();

                return lastSeguimientoExpression;
            }
        }

        public long? Imei { get; set; }

        public long MarcaId { get; set; }

        [Column(TypeName = "date")]
        public DateTime FechaIngreso { get; set; }

        public long CodArticulo { get; set; }

        [Required]
        [MaxLength(75)]
        public string Descripcion { get; set; }

        [ForeignKey("MarcaId")]
        public virtual Marca Marca { get; set; }

        public virtual ICollection<Seguimiento> Seguimientos { get; set; }

        [NotMapped]
        public Seguimiento LastSeguimiento
        {
            get
            {
                var lastSeguimientoFilter = Celular.LastSeguimientoExpression.Compile();
                return lastSeguimientoFilter(this);
            }
        }
    }
}
